package com.example.teaching_server.exception;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;

/**
 * 资源未找到异常
 * 当请求的资源不存在时抛出此异常
 *
 * @author 开发团队
 * @since 1.0.0
 */
@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {

    /**
     * 资源ID
     */
    private final Long resourceId;

    /**
     * 资源类型
     */
    private final String resourceType;

    /**
     * 构造函数
     *
     * @param resourceType 资源类型
     * @param resourceId 资源ID
     */
    public ResourceNotFoundException(String resourceType, Long resourceId) {
        super(String.format("%s with id %d not found", resourceType, resourceId));
        this.resourceType = resourceType;
        this.resourceId = resourceId;
    }

    /**
     * 构造函数
     *
     * @param message 错误消息
     */
    public ResourceNotFoundException(String message) {
        super(message);
        this.resourceType = null;
        this.resourceId = null;
    }

    /**
     * 获取资源ID
     *
     * @return 资源ID
     */
    public Long getResourceId() {
        return resourceId;
    }

    /**
     * 获取资源类型
     *
     * @return 资源类型
     */
    public String getResourceType() {
        return resourceType;
    }

    /**
     * 创建资源未找到异常（带资源类型和ID）
     *
     * @param resourceType 资源类型
     * @param resourceId 资源ID
     * @return ResourceNotFoundException实例
     */
    public static ResourceNotFoundException of(String resourceType, Long resourceId) {
        return new ResourceNotFoundException(resourceType, resourceId);
    }

    /**
     * 创建资源未找到异常（自定义消息）
     *
     * @param message 错误消息
     * @return ResourceNotFoundException实例
     */
    public static ResourceNotFoundException withMessage(String message) {
        return new ResourceNotFoundException(message);
    }
}
